gsk: Enable depth testing
authorEmmanuele Bassi <ebassi@gnome.org>
Fri, 8 Jul 2016 15:40:42 +0000 (16:40 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Tue, 18 Oct 2016 10:49:08 +0000 (11:49 +0100)
Use the appropriate depth testing function for transparent items.

gsk/gskglrenderer.c

index 82911074f2091f7117bf4a282bc529be008ccf65..6a787d11748d923687f360ddb5f7817c261a0ca5 100644 (file)
@@ -845,6 +845,13 @@ gsk_gl_renderer_render (GskRenderer *renderer,
   gsk_gl_renderer_clear (self);
 
   glDisable (GL_BLEND);
+  if (self->has_depth_buffer)
+    {
+      glEnable (GL_DEPTH_TEST);
+      glDepthFunc (GL_LESS);
+    }
+  else
+    glDisable (GL_DEPTH_TEST);
 
   /* Opaque pass: front-to-back */
   GSK_NOTE (OPENGL, g_print ("Rendering %u opaque items\n", self->opaque_render_items->len));
@@ -855,6 +862,12 @@ gsk_gl_renderer_render (GskRenderer *renderer,
       render_item (self, item);
     }
 
+  if (self->has_depth_buffer)
+    {
+      glEnable (GL_DEPTH_TEST);
+      glDepthFunc (GL_LEQUAL);
+    }
+
   glEnable (GL_BLEND);
   glBlendFuncSeparate (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE);
   glBlendEquation (GL_FUNC_ADD);